//  [-1 ,4,2, 3 ] => [  , 16 , 9] xxx
// 所以要实现功能 ，原数组必须有序 , 即从小到大或从大到小
// nums = [-4,-1,0,3] => [0,1,9,16]
// 1. 指针
var sortedSquares = function (nums) {
    const n = nums.length;
    const ans = Array(n);
    let i = 0, j = n - 1;
    for (let p = n - 1; p >= 0; p--) {
        const x = nums[i] * nums[i];
        const y = nums[j] * nums[j];
        if (x > y) {
            ans[p] = x;
            i++;
        } else {
            ans[p] = y;
            j--;
        }
    }
    return ans;
};
// 2. 栈
var sortedSquares = function (nums) {
    // 升序平方排列

    let a = [];
    let left = 0;
    let right = nums.length - 1;

    while (left <= right) {

        const x = nums[left] * nums[left];
        const y = nums[right] * nums[right];
        if (x > y) {
            a.unshift(x);
            left++
        } else {
            a.unshift(y);
            right--
        }
    }
    return a
};
// 3. 排序
var sortedSquares = function (nums) {

    nums.forEach((item, index, arr) => {
        arr[index] = item * item
    })

    return nums.sort((a, b) => a - b)
};
// 4. 双指针
var sortedSquares = function (nums) {

    nums.forEach((item, index, arr) => {
        arr[index] = item * item
    })
    for (let i = 0; i <= nums.length; i++) {
        for (let j = i + 1; j <= nums.length; j++) {
            if (nums[i] > nums[j]) {
                // 两个人换苹果，一个人手上只能拿一个苹果，所以需要第三个人
                let a = nums[i];
                nums[i] = nums[j];
                nums[j] = a
            }
        }
    }
    return nums
};